home *** CD-ROM | disk | FTP | other *** search
/ Gekikoh Dennoh Club 2 / Gekikoh Dennoh Club Vol. 2 (Japan).7z / Gekikoh Dennoh Club Vol. 2 (Japan) (Track 01).bin / tools / pcd2_126 / pcd2_126.lzh / WILD.HAS < prev    next >
Text File  |  1997-01-02  |  2KB  |  140 lines

  1. *
  2. * ワイルドカード指定があったら、一つづつオープンしてファイルハンドルを渡す
  3. *
  4.     .include    doscall.mac
  5.     .xdef    GetFHdl
  6.     .xdef    FLG_WILD
  7.     .xdef    GetFHdl_Break
  8.     .xdef    Fsize,Fname
  9. * in (a0)~    ファイルネーム    一回目
  10. * in d0.w    FileHandle    二回目以降
  11. GetFHdl:
  12.     movem.l    d1/a0-a2,-(sp)
  13.     tas.b    (FLG_WILD)
  14.     beq    NewFile
  15.  
  16.     move.w    d0,-(sp)
  17.     DOS    _CLOSE
  18.     addq.l    #2,sp
  19.  
  20.     pea    FileBuff
  21.     DOS    _NFILES
  22.     addq.l    #4,sp
  23. 1:    tst.l    d0        * 一回目の時はpath分離・カレントディレクトリ変更・_FILESでここに戻る
  24.     bmi    Exit
  25.     move.w    #0,-(sp)
  26.     pea    (fn)
  27.     DOS    _OPEN
  28.     addq.l    #6,sp
  29.     ext.l    d0
  30.     movem.l    (sp)+,d1/a0-a2
  31.     rts
  32.  
  33. GetFHdl_Break:
  34.     movem.l    d1/a0-a2,-(sp)    * ぢつは辻妻合わせ(こんな短いルーチンで最初はバグった)
  35.     move.w    d0,-(sp)
  36.     DOS    _CLOSE
  37.     addq.l    #2,sp
  38. Exit:                * 次のファイルが無くなるとここへ来る
  39.     tst.b    (pathsave)
  40.     beq    @f
  41.     pea    (pathsave-1)
  42.     DOS    _CHDIR
  43.     add.l    #4,sp
  44. @@:
  45.     move.w    CURDRV,-(sp)
  46.     DOS    _CHGDRV
  47.     addq.l    #2,sp
  48.     sf.b    (FLG_WILD)
  49.     moveq.l    #-1,d0
  50.     movem.l    (sp)+,d1/a0-a2
  51.     rts
  52.  
  53.  
  54. NewFile:
  55.     DOS    _CURDRV
  56.     move.w    d0,CURDRV
  57.     move.b    (1,a0),d0
  58.     cmpi.b    #':',d0
  59.     bne    NoDrv
  60.     clr.w    d1
  61.     move.b    (a0),d1
  62.     andi.b    #$5f,d1
  63.     subi.b    #'A',d1
  64.     move.w    d1,-(sp)
  65.     DOS    _CHGDRV
  66.     addq.w    #2,sp
  67.     cmp.w    d1,d0
  68.     bmi    Drv_err
  69.     lea.l    (2,a0),a0
  70. NoDrv:
  71.     lea.l    (a0),a1
  72.     lea.l    (pathbuff),a2
  73.  
  74. @@:
  75.     move.b    (a1)+,(a2)+
  76.     bne    @b
  77. @@:    move.b    -(a2),d0
  78.     cmpi.b    #'\',d0
  79.     beq    @f
  80.     cmpi.b    #'/',d0
  81.     bne    @b
  82. @@:
  83.     cmpa.l    #pathbuff,a2
  84.     bmi    NoPath
  85.     clr.b    (a2)+
  86.     pea    (pathsave)
  87.     clr.w    -(sp)
  88.     DOS    _CURDIR
  89.     addq.l    #6,sp
  90.  
  91.     pea    (pathbuff)
  92.     DOS    _CHDIR
  93.     addq.l    #4,sp
  94.     tst.l    d0
  95.     bpl    FILES_1st
  96.  
  97.     move.w    CURDRV,-(sp)    * 指定pathがなかった
  98.     DOS    _CHGDRV
  99.     addq.l    #2,sp
  100.     moveq.l    #-1,d0
  101.     movem.l    (sp)+,d1/a0-a2
  102.     rts
  103.  
  104. NoPath:                * path指定がなかった
  105.     clr.b    (pathsave)
  106.     lea.l    (pathbuff),a2
  107. FILES_1st:
  108.     move.w    #%100000,-(sp)
  109.     pea    (a2)
  110.     pea    (FileBuff)
  111.     DOS    _FILES
  112.     lea.l    (10,sp),sp
  113.     bra    1b
  114.  
  115. Drv_err:            * 指定ドライブがなかった
  116.     moveq.l    #-1,d0
  117.     movem.l    (sp)+,d1/a0-a2
  118.     rts
  119.  
  120.     .data
  121.     .align    4
  122. CURDRV:    .dc.w    0
  123.     .dc.b    '\/'
  124. pathbuff:
  125.     .ds.b    128
  126.  
  127.     .dc.b    '\'
  128. pathsave:
  129.     .ds.b    65
  130. FLG_WILD:    .dc.b    0
  131.     .bss
  132.     .align    4
  133. FileBuff:
  134.     .ds.b    26
  135. Fsize:    .ds.l    1
  136. Fname:
  137. fn    .ds.b    23
  138.  
  139.     .end
  140.